package com.qianfeng.springcloud.address.controller;

//
//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖镇楼                  BUG辟易  
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  
//  


import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.qianfeng.springcloud.address.pojo.Address;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;

import java.util.Random;

/**
 * Created by Jackiechan on 2022/6/23 9:28
 *
 * @author Jackiechan
 * @version 1.0
 * @since 1.0
 */
@RestController
@RequestMapping("/address")
@RefreshScope //代表当知道配置发生变化的时候会重新加载配置
public class AddressController {
    @Value("${server.port}")
    private int port;

    @Value("${women.zidingyi.name}")
    private String name;


    @GetMapping("/info/{id}")
    public Address findById(@PathVariable  Long id) {
        Address address = new Address();
        address.setId(id);
        address.setAddressName("沙阳路一通小区v2222-->"+id+"-->"+port);
        address.setPohoneNum("14874874874==>"+id+"-->"+port);
        return address;
    }


    @GetMapping("/test/{id}")
    public Address test(@PathVariable  Long id) {
        Address address = new Address();
        address.setId(id);
        address.setAddressName("这是测试的数据-->"+id+"-->"+port);
        address.setPohoneNum("测试手机号147==>"+id+"-->"+port);
        return address;
    }

    @GetMapping("/test2")
    public String test2( String name) {
        return "test2====>" + name;
    }

    @GetMapping("/test3")
    //设置降级机制, 降级就是出现问题的时候的备选方案,这里面指定了一个方法发名字
    //方法需要写在当前类中,参数和当前方法的参数一致,名字和注解的参数名一致
    @HystrixCommand(fallbackMethod = "abc")
    public String test3(String name, int age) throws InterruptedException {
      //  Thread.sleep(3000);
        if (new Random().nextBoolean()) {
            int i = 1 / 0;
        }
        return "test3====>" + name + "====>age---->" + age;
    }

    @PostMapping("/test4")
    public Address test4(@RequestBody  Address address) {
        address.setAddressName("这是test4设置的地址");
        return address;
    }

    /**
     * 这个是test3指定的降级方法
     * @param name
     * @param age
     * @return
     * @throws InterruptedException
     */
    public String abc(String name, int age) throws InterruptedException {
        System.err.println("降级的方法触发了,收到的参数是" + name + "age-=---" + age);
        return "这是降级返回的数据";
    }


    @GetMapping("/name")
    public String getName() {
        return name;
    }
}
